<?php
/**
 * @version 1.0
 * @author Bondarenko
 * @since 29.11.2012
 */
class Model_Admin extends Model
{

     private $table_news = 'news';
     private $table_categories = 'categories';
     private $table_tags = 'tags';
     private $table_tags_news = 'tags_news';
  /**
   * Получение списка новостей из бд
   *
   * @version 1.0
   * @author Bondarenko
   * @since 29.11.2012
   */
    public function get_list_news()
    {	
       $sql = "SELECT * FROM $this->table_news";
       $sql_id = $this->db->query($sql);
       while ($hash = $this->db->fetch_array($sql_id))
        {
            $res[] = $hash;
        }
       return $res;
    }
    /**
   * Получение одной новости из бд по ид
   *
   * @version 1.0
   * @author Bondarenko
   * @since 29.11.2012
   * @param $item_id  
   */
    public function get_news($item_id)
    { 
       $item_id = intval($item_id);
       $sql = "SELECT * FROM $this->table_news WHERE news_id = '$item_id'";
       $res = $this->db->query_first($sql);
      // собираем теги
      $sql = "SELECT t.name AS tags FROM  $this->table_tags_news t_n
       LEFT JOIN  $this->table_tags t  ON t_n.news_id = $item_id AND t_n.tag_id = t.tag_id";
       $sql_id = $this->db->query($sql);
        while ($hash = $this->db->fetch_array($sql_id))
        {
          if(!empty($hash[0]))
          {
            $res_tag[] = $hash[0];
          }
        }
        if(isset($res_tag)){
           $res['tags'] = implode(',', $res_tag);
        }
       return $res;
    }

    /**
   * Получение списка категорий
   *
   * @version 1.0
   * @author Bondarenko
   * @since 29.11.2012 
   */
    public function get_list_categories()
    { 
       $item_id = intval($item_id);
       $sql = "SELECT * FROM $this->table_categories"; 
       $sql_id = $this->db->query($sql);
       while ($hash = $this->db->fetch_array($sql_id))
        {
            $res[] = $hash;
        }
       return $res;
    }
  /**
   * Удаление новости из бд
   *
   * @version 1.0
   * @author Bondarenko
   * @since 29.11.2012
   */
    public function delete_item($item_id)
    { 
       $item_id = intval($item_id);
       
       $sql = "SELECT * FROM $this->table_news WHERE news_id = '$item_id'";
       $res = $this->db->query_first($sql);
       if (!empty($res['pict'])) { unlink(UPLOAD_DIR.$res['pict']); };

       $sql = "DELETE FROM $this->table_news WHERE news_id = '$item_id'";
       $res = $this->db->query($sql);
      
       // удаляем теги из таблицы
       $sql = "SELECT tag_id FROM $this->table_tags_news WHERE news_id = '$item_id'";
        $sql_id = $this->db->query($sql);
        while ($hash = $this->db->fetch_array($sql_id))
        {
          $tag_ids[] = $hash;
        }
        if(isset($tag_ids))
        {
          foreach ($tag_ids as $key => $value) 
          {
            $sql = "SELECT count FROM $this->table_tags WHERE tag_id = '".$value['tag_id']."'";
            $hash = $this->db->query_first($sql);
            //dg($hash['count']);
            if($hash['count'] > 1) 
            { 
              $new_count = $hash['count'] - 1;
              $sql = "UPDATE $this->table_tags SET count = '$new_count' WHERE tag_id = '".$value['tag_id']."'";
              $this->db->query($sql);
            } else {
              $sql = "DELETE FROM $this->table_tags WHERE tag_id = '".$value['tag_id']."'";
              $res = $this->db->query($sql);
            }
          } 
         } 
         $sql = "DELETE FROM $this->table_tags_news WHERE news_id = '$item_id'";
         $res = $this->db->query($sql);

       return;
    }
     /**
     * Сохраняет или редактирует новость
     *
     * @param $id int -  Ид новости
     * @param $data - новость
     * @version 1.0
     * @author Bondarenko
     * @since 30.11.2012
    */
    public function save_news_data($item_id,$data) 
    {
       $item_id = intval($item_id);
       if(empty($data['visibility'])){ $data['visibility'] = 'hide';}
       $date = date('Y-m-d H:i:s');
       if(!empty($item_id) AND $item_id > 0)
       {
          // если изображение загружено, то удаляем старое с сервера
          if(!empty($data['pict']))
          {
            $item_id = intval($item_id);
            $sql = "SELECT pict FROM $this->table_news WHERE news_id = '$item_id'";
            $res = $this->db->query_first($sql);
            if(!empty($res['pict']))
            {
              unlink(UPLOAD_DIR.$res['pict']);
            }
          }
         // формируем запрос
          $sql = "UPDATE $this->table_news SET date = '$date'";
          foreach ($data as $key => $value) 
          {
            $sql .= ", $key = '".mysql_real_escape_string($value)."' ";       
          } 
          $sql .= "WHERE news_id = $item_id";
          $sql_id = $this->db->query($sql);
          return $sql_id;    
        } 
        else 
        {
          // формируем запрос
         $sql = "INSERT INTO $this->table_news SET date = '$date'";
         foreach ($data as $key => $value) 
          {
            $sql .= ", $key = '".mysql_real_escape_string($value)."' ";       
          } 
          $sql_id = $this->db->query($sql);
          $insert_id = $this->db->insert_id($sql_id);
          return $insert_id;
        }
     }
    /**
   * Сохранение тегов
   *
   * @version 1.0
   * @author Bondarenko
   * @since 30.11.2012
   * @param $item_id  - ИД новости к которой привязаны теги
   * @param $tags - строка тегов
   */
    public function save_tags($item_id, $tags)
    { 
      $item_id = intval($item_id);
      // перед тем как сохранить теги для данной новости, удаляем все теги этой новости
      if(!empty($item_id) AND $item_id > 0)
      {
        $sql = "SELECT tag_id FROM $this->table_tags_news WHERE news_id = '$item_id'";
        $sql_id = $this->db->query($sql);
        while ($hash = $this->db->fetch_array($sql_id))
        {
          $tag_ids[] = $hash;
        }
        if(isset($tag_ids))
        {
          foreach ($tag_ids as $key => $value) 
          {
            $sql = "SELECT count FROM $this->table_tags WHERE tag_id = '".$value['tag_id']."'";
            $hash = $this->db->query_first($sql);
            //dg($hash['count']);
            if($hash['count'] > 1) 
            { 
              $new_count = $hash['count'] - 1;
              $sql = "UPDATE $this->table_tags SET count = '$new_count' WHERE tag_id = '".$value['tag_id']."'";
              $this->db->query($sql);
            } else {
              $sql = "DELETE FROM $this->table_tags WHERE tag_id = '".$value['tag_id']."'";
              $res = $this->db->query($sql);
            }
          } 
        }
        $sql = "DELETE FROM $this->table_tags_news WHERE news_id = '$item_id'";
        $res = $this->db->query($sql);
      }
      // получаем массив тегов из строки и сохраняем если тега нет, или увеличиваем
      // счетчик если он есть.
      if (isset($tags)) 
      {
        $tags = explode(",", $tags);  
      } 
      $tags = array_unique($tags);
      foreach ($tags as $key => $value) 
      {
        $value = trim($value);
      //  print $tags[$key];
        $sql = "SELECT tag_id, count FROM $this->table_tags WHERE name = '$value'";
        $sql_id = $this->db->query($sql);
        if($this->db->num_rows($sql_id) > 0)
        {
          $row = $this->db->fetch_array($sql_id);
          $new_count = $row['count'] + 1;
          $sql = "UPDATE $this->table_tags SET 
          count = '".mysql_real_escape_string($new_count)."' WHERE name = '$value'";
          $this->db->query($sql);
          $sql = "INSERT INTO $this->table_tags_news SET 
          tag_id = '".$row['tag_id']."',  news_id = '".$item_id."'";
          $sql_id_in = $this->db->query($sql);
        } 
        else 
        {
          $sql = "INSERT INTO $this->table_tags SET 
          count = '1', name = '".mysql_real_escape_string($value)."'";
          $sql_id = $this->db->query($sql);
          $insert_id = $this->db->insert_id($sql_id);
          $sql = "INSERT INTO $this->table_tags_news SET 
          tag_id = '".$insert_id."',  news_id = '".$item_id."'";
          $sql_id = $this->db->query($sql);
        }
      }
      //exit;
    }
}
?>